在绘制点的基础上,我们可以拓展来绘制多个点、线和面。在OpenGL ES中,面特指一个三角形。绘制调用glDrawArrays(int mode, int first, int count)方法。
mode的参数:
1 | - GL_POINTS ————绘制独立的点 |
顶点数据
1 | //顶点数组 |
3个值代表一个顶点,因此这里有3个顶点。
绘制多点
1 | // 绘制点 |
在glDrawArrays设置需要绘制的点的数量。如果数量超过设置的坐标的数量,那么会在原点绘制
绘制不封闭线
1 | //设置线的宽度 |
glDrawArrays中的参数为GL10.GL_LINE_STRIP。同样,如果数量超过设置的坐标的数量,那么会在原点绘制连线。
绘制封闭连线
1 | gl.glDrawArrays(GL10.GL_LINE_LOOP, 0, 5); |
glDrawArrays中的参数为GL10.GL_LINE_LOOP。
绘制多条连线
1 | gl.glDrawArrays(GL10.GL_LINES, 0, 5); |
glDrawArrays中的参数为GL10.GL_LINES。两个连之前绘制一条线,即第一个和第二个点绘制一条线,第三个和第四个点绘制一条线。多出的点会被舍弃。
绘制面
1 | //顶点数组 |
1 | // 绘制面 |
绘制模式为GL_TRIANGLES,即1,2,3个点绘制一个图形,4,5,6个点绘制一个。当顶点个数不足以绘制三角形时,就会被忽略,如果设置的点数量超过顶点数,会用原点顶替(如上面的情况)。
绘制连续的面
1 | gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 5); |
指定绘制模式为GL_TRIANGLE_STRIP。这个模式是什么呢,就是会用相邻的3个点绘制一个面,比如刚刚顶点数组,就用1,2,3个点绘制一个面,在用2,3,4绘制一个,再用3,4,5绘制一个。
绘制初始点的面
1 | gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 4); |
指定绘制模式为GL_TRIANGLE_FAN,本身以第一个顶点为公共点,绘制了相邻的三角形。比如上面的点,就会以1,2,3绘制一个面,1,3,4绘制一个,再以1,4,5绘制一个。
索引绘制
索引就是让不同的顶点按照规定的顺序来绘制,这样就不会导致各种三角形的错乱。
首先定义一个索引数组,这里的0,1,2等指的是顶点顺序,比如0,1,2就是按照0,1,2的顺序绘制三角形,0,2,3就是按照0,2,3的顺序绘制三角形,就不会出现0,1,2 和1,2,3 以及 0,2,3都绘制的情况。
1 | //索引数组 |
获取浮点型索引数据:
1 | //获取浮点型索引数据 |
绘制图形时:
1 | //绘制三角形 |
OpenGL ES提供了两类方法来绘制一个空间几何图形:
1 | -public abstract void glDrawArrays(int mode, int first, int count) 使用VetexBuffer 来绘制,顶点的顺序由vertexBuffer中的顺序指定。 |
glDrawElements各个参数如下:
1 | - mode——指明被渲染的是哪种图元,被允许的符号常量有GL_POINTS,GL_LINE_STRIP,GL_LINE_LOOP,GL_LINES,GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN 和GL_TRIANGLES |